#!/usr/bin/env python
# -*- coding: utf-8 -*-

import SOAP
from common import DEBUG
if DEBUG:
	from time import sleep

class Client:
	def __init__(self,user,passwd,version):
		self.user = user
		self.passwd = passwd
		self.version = version
		self.server = SOAP.SOAPProxy("http://www.silix.org/web_service/netfinity/server2.php")
	###chiamate remote
	def sendMsg(self,dest,text):
		if DEBUG:
			print "DEBUG sendMsg",dest,text
			sleep(2)
			return -1
		return self.server.sendUMS(self.user,self.passwd,dest,text,"%s %s"%self.version,"0","","0") #.partition(":")[0]
	def getAddressBook(self):
		if DEBUG:
			s = '"Alessandra","3412345678","default","Chiara","3412345678","default","Cinzia","3412345678","default","Davide","3412345678","default","Elena","3412345678","default","Gian","3412345678","default","Giulia","3412345678","default","Irene","3412345678","default","Kaworu","3412345678","default","Mairetta","3412345678","default","Manuel","3412345678","default","Mike","3412345678","default","Pippo","3412345678","default","Simone","3412345678","default","Spidui","3412345678","default","Valeria","3412345678","default","XAos","3412345678","default","Antonella","3412345678","Compagnia","Arael","3412345678","Compagnia","Armisael","3412345678","Compagnia","Ciropom","3412345678","Compagnia","Dike","3412345678","Compagnia","Fidone","3412345678","Compagnia","Lorenzo","3412345678","Compagnia","McSpritz","3412345678","Compagnia","Miccia","3412345678","Compagnia","Michel","3412345678","Compagnia","Narcolessimon","3412345678","Compagnia","Roli","3412345678","Compagnia","Vagabond","3412345678","Compagnia"," ` io `","3412345678","Silix.org","Abenzka","3412345678","Silix.org","Armisael","3412345678","Silix.org","Channels","3412345678","Silix.org","MikAnd","3412345678","Silix.org","Silix.org","3412345678","Silix.org","Claudia","3412345678","Clan","Emanuele","3412345678","Clan","Erietta","3412345678","Clan","Ermanno","3412345678","Clan","Francesco","3412345678","Clan","Gaia","3412345678","Clan","Jacopo","3412345678","Clan","Laura","3412345678","Clan","Matteo","3412345678","Clan","Riccardo","3412345678","Clan","Stefania","3412345678","Clan","Alberto","3412345678","Pilcante","Lorenzo","3412345678","Pilcante","Marcel","3412345678","Pilcante","Miccia","3412345678","Pilcante","Sabrina","3412345678","Pilcante","Spidui","3412345678","Pilcante","Stefania","3412345678","Pilcante","Vagabond","3412345678","Pilcante","Veronica","3412345678","Pilcante","Elena","3412345678","Dublin 2k6","Emanuela","3412345678","Dublin 2k6","Marta (Sarda)","3412345678","Dublin 2k6","Roberta","3412345678","Dublin 2k6","Valentina","3412345678","Dublin 2k6","Abenzka","3412345678","Uni","Armisael","3412345678","Uni","Channels","3412345678","Uni","Ciropom","3412345678","Uni","Fabri","3412345678","Uni","Mari8i","3412345678","Uni","Matta","3412345678","Uni","Matteo","3412345678","Uni","MikAnd","3412345678","Uni","Silvia Zobele","3412345678","Uni","Arael","3412345678","DnD","Armisael","3412345678","DnD","Ciropom","3412345678","DnD","McSpritz","3412345678","DnD","Angelo Trainotti","3412345678","!vodafone","Arianna","3412345678","!vodafone","Francesco","3412345678","!vodafone","Giovanna","3412345678","!vodafone","Giulietta","3412345678","!vodafone","Jimmy","3412345678","!vodafone","Lorena","3412345678","!vodafone","Sat","3412345678","!vodafone"'
		else:
			s = self.server.getAddressBook(self.user,self.passwd)
		
		l = s[1:-1].split('","')
		
		f = 0
		temp = [] # [nome,numero,gruppo]
		abl = []
		abd = {}
		for a in l:
			#print f,count,a
			temp.append(a)
			if f == 2:
				#print temp
				#k = ("%."+str(self.__ncifre(len(abl)))+"d %s |%s|") % (count,temp[0],temp[2])
				k = (temp[2],temp[0])
				# k = (gruppo,nome)
				abl.append(k)
				abd[k] = temp[1] #numero
				temp = []
			f = (f+1) % 3
		
		return abl,abd
	def startMessage(self):
		if DEBUG:
			return self.__unpack("(?score=-17?msgAgain=1?alias=Martino?smsSentToday=0?sentSharedSms=0?sharedSms=100?signature=  **netFinity 1.1.0**?nDailySms=100?version=netFinity 1.1.0)La causa primaria di guasti nelle apparecchiature elettriche e' la garanzia scaduta.")
		return self.__unpack(self.server.startMessage(self.user,self.passwd))
	##
	def __unpack(self,text):
		dinfo = {}
		while text.find("(?") >= 0:
			start = text.find("(?")
			end = start + text[start:].find(")") + 1 #la ")" la tengo in sinfo (come "(?")
			if end<0:
				break
			info = text[start+2:end-1] # +2 -1 => mi libero di "(?" e ")"
			info = info.split("?")
			for i in info:
				i = i.partition("=")
				dinfo[i[0]] = i[2]
			text = text[:start] + text[end:]
		return text,dinfo
	def __ncifre(self,n):
		if n==0:
			return 0
		else:
			return 1 + self.__ncifre(n/10)

